#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<int>> adj;
const int N = 1e5 + 5;
int a[N], fa[N], lost[N], ans[N];
int b[N], c[N];
// bool g[N][N];
set<pair<int, int>> g;
int find(int v) { return v == fa[v] ? v : fa[v] = find(fa[v]); }
void unite(int x, int y) {
  x = find(x), y = find(y);
  fa[x] = y;
}
int main() {
  int n, m, k;
  scanf("%d%d", &n, &m);
  adj.resize(n + 1);
  // 初始化并查集
  for (int i = 0; i <= n; ++i) fa[i] = i, lost[i] = 1;
  // 建图
  for (int i = 1; i <= m; ++i) {
    int x, y;
    cin >> x >> y;
    b[i] = x, c[i] = y;
    if (g.find({x, y}) == g.end() || g.find({y, x}) == g.end()) {
      adj[x].push_back(y);
      adj[y].push_back(x);
      g.insert({x, y});
      g.insert({y, x});
    }
  }
  scanf("%d", &k);
  // 输入城市被攻占顺序
  for (int i = 1; i <= k; ++i) scanf("%d", a + i);
  // 城市的被攻占情况
  for (int i = 1; i <= k; ++i) lost[a[i]] = 0;
  // a. 对没有被攻占的城市，不必重建，直接将其连通
  for (int i = 1; i <= m; ++i) {
    int x = b[i], y = c[i];
    if (lost[x] && lost[y]) unite(x, y);
  }
  // b. 对被攻占的城市，逆向思维，倒序重建
  for (int i = k; i >= 1; --i) {
    int s = a[i], cnt_conn = 0;
    lost[s] = 1;
    for (auto e : adj[s]) {  // 重建
      if (lost[e] && find(s) != find(e)) unite(s, e), cnt_conn++;
    }
    if (cnt_conn >= 2) ans[a[i]] = 1;
  }
  for (int i = 1; i <= k; ++i) {
    if (ans[a[i]])
      printf("Red Alert: City %d is lost!\n", a[i]);
    else
      printf("City %d is lost.\n", a[i]);
  }
  if (k == n) printf("Game Over.\n");
}
